package br.com.sgmf.web.managedbean;

import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import br.com.sgmf.model.HistoricoVeiculo;
import br.com.sgmf.service.VeiculoService;

import com.lowagie.text.Document;
import com.lowagie.text.HeaderFooter;
import com.lowagie.text.PageSize;
import com.lowagie.text.Phrase;

@Component
@ManagedBean
@RequestScoped
public class RelatorioVeiculoBean {

	private static final String DATA_FIM_NAO_PODE_SER_MENOR_QUE_DATA_INICIO = "Data Fim não pode ser menor que Data Início";
	private static final String RELATORIO_DE_HISTORICO_DE_VEICULOS = "Relatório de Histórico de Veículos";

	private String placa;
	private Date inicio;
	private Date fim;

	private List<HistoricoVeiculo> veiculos;

	@Autowired
	private VeiculoService veiculoService;

	@PostConstruct
	public void inicializar() {
		veiculos = null;
	}

	public List<HistoricoVeiculo> buscar() {
		if (inicio != null && fim != null && fim.before(inicio)) {
			FacesContext context = FacesContext.getCurrentInstance();
			FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN,
					DATA_FIM_NAO_PODE_SER_MENOR_QUE_DATA_INICIO, null);
			context.addMessage(null, message);
		} else {
			veiculos = veiculoService.findBetweenDate(inicio, fim, placa);
		}
		return veiculos;
	}

	public void preProcessPDF(Object document) {
		Document pdf = (Document) document;
		pdf.setPageSize(PageSize.A4.rotate());
		HeaderFooter header = new HeaderFooter(new Phrase(
				RELATORIO_DE_HISTORICO_DE_VEICULOS), false);
		pdf.setHeader(header);
		pdf.open();
	}

	public String getPlaca() {
		return placa;
	}

	public void setPlaca(String placa) {
		this.placa = placa;
	}

	public Date getInicio() {
		return inicio;
	}

	public void setInicio(Date inicio) {
		this.inicio = inicio;
	}

	public Date getFim() {
		return fim;
	}

	public void setFim(Date fim) {
		this.fim = fim;
	}

	public List<HistoricoVeiculo> getVeiculos() {
		return veiculos;
	}

	public void setVeiculos(List<HistoricoVeiculo> veiculos) {
		this.veiculos = veiculos;
	}

	public VeiculoService getVeiculoService() {
		return veiculoService;
	}

	public void setVeiculoService(VeiculoService veiculoService) {
		this.veiculoService = veiculoService;
	}

}